//
// Created by Jisam on  2024年10月24日12:53:35
// Solution of  luogu/problemlists/ 线性动态规划/P2679 [NOIP2015 提高组] 子串.cpp
// 2024-10-24 13:25:44 AC 100 动态规划 + 前缀和降维
#include <bits/stdc++.h>

#define int long long
#define endl "\n"
#define all(x) (x).begin(), (x).end()
#define pb push_back
using namespace std;

const int MOD = 1e9 + 7;
int f[201][201]={1},sum[201][201];
signed main()
{
    cin.tie(nullptr)->sync_with_stdio(false);
    int n, m, ki;
    string a, b;
    // 输入字符串 a 和 b 的长度，以及子串的最大长度
    cin >> n >> m >> ki;
    // 输入字符串 a 和 b
    cin >> a >> b;
    // 初始化动态规划数组 f 和 sum
    for (int i = 1; i <= n; i++)
    {
        for (int j = m; j >= 1; j--)
        {
            for(int k = ki; k >= 1; k --){
                // 如果当前字符匹配，则更新 sum 数组
                // 使用sum数组计算 从 1 到 p + 1 的 f（i - t, j - t,k - 1)的和
                f[j][k] = (f[j][k] + (sum[j][k] = a[i - 1] ==b[j - 1]? sum[j - 1][k] + f[j - 1][k - 1] : 0)) % MOD;
            }
        }
    }
    // 输出最终结果
    cout << f[m][ki];
    return 0;
}
